今天就來做我們的首頁吧 ~!! ??
其他兩家的首頁
基本上都是圖片輪播
的形式
加上一個輸入匡
來搜尋目的地
那我們今天就來做這個輪播功能
吧
由於Quasar
在創好專案時很好心幫我們產生了一個簡易只有LOGO的首頁
不過現在我們要自己來做一個
所以我們在 src/pages/
底下開一個Index
資料夾
並在底下建立 Index.vue
來當我們的首頁
內容因為還沒有東西所以先用template
包個q-page
(記得嗎 前面的章節有提過 QPageContainer底下的第一個頁面 一定要用QPage哦)
<template>
<q-page>
</q-page>
</template>
然後把他原本的Index.vue
刪掉
所以現在目錄應該會是這樣
改了之後我們要去router
改變原本index
的路徑
我們開啟 src/router/routers.js
來設置我們的新路徑
由於我們創的資料夾也叫 Index
因此只要把原本Index.vue
的.vue
拿掉就好
就換變成這樣
const routes = [
{
path: '/',
component: () => import('layouts/MyLayout.vue'),
children: [
{ path: '', component: () => import('pages/Index') }
]
}
]
我個人習慣把一頁拆成很多小區塊(section)
來放
優點是之後要快速替換掉某些頁面只要註解一行
就好
要做A/B測試也比較方便
既然是Index
下的區塊,那我們就在src/pages/Index
下建立一個名叫 SectionCarousel.vue
的元件
所以現在目錄長這樣
一樣先給個<template></template>
,這邊因為是首頁中的小區塊所以就可以不用q-page
了
再來要到Index
中引入
我們回到 src/pages/Index/Index.vue
<script>
import SectionCarousel from './SectionCarousel'
export default {
components: {
SectionCarousel
}
}
</script>
然後在上面的q-page
中加入剛剛引入的元件(component)
所以上半部會變這樣
<template>
<q-page>
<section-carousel/>
</q-page>
</template>
圖片輪播的功能Quasar自己就有囉,所以不用在去外面找插件來引入
這邊要注意
的就是要記得要到設定檔 (quasar.conf.js)
中引入
喔
framework: {
components: [
'QCarousel',
'QCarouselSlide',
'QCarouselControl'
],
}
引入後我們就開始吧~
然後我們先放入Carousel的主要元件
<template>
<q-carousel
color="white"
infinite
arrows
autoplay
height="400px"
>
</q-carousel>
</template>
這邊我們給他幾個屬性
預設的顏色會是主顏色在 src/css/theme/common.variables.styl
裡的 $primary
不過主顏色在很多元件預設都會用到,因此我們就不改主顏色了
這邊我們把它設為白色 看起來比較正常點~
infinite
顧名思義就是 無限❌,循環輪播⭕️ ,就是到最後一張會跳回第一張
arrows
出現左右切換的箭頭
autoplay
自動切換圖片
其他還有蠻多屬性,這邊就不多介紹,可以參考官方範例~
這邊的輪播是也是區塊形式,不一定要放圖片啦~
不過我們就只放圖片就好囉
這裡也非常簡單
我們在剛剛的區塊中加入
<q-carousel-slide img-src="statics/beef.JPG" />
<q-carousel-slide img-src="statics/egg.JPG" />
我事先在 src/statics
底下放兩張圖(beef.JPG、egg.JPG)來當範例,各位同學可以自己放自己喜歡的圖哦~
所以目前頁面長這樣~~
看到別人網站圖片中間都有文字~
那我們要怎樣加入文字呢?
剛好Quasar
在carousel
中有個子元件(QCarouselControl)
拿來給你加自訂按鈕在頁面上的
我們就直接來改成我們要的標題文字
看了官方的範例,QCarouselControl
要放在QCarousel
的最後面,也就是QCarouselSlide
的後面
<q-carousel-control
position="center"
slot="control-nav"
slot-scope="carousel"
class="carouselInput"
>
</q-carousel-control>
position
位置,前面幾篇也有提到,這邊要放中間所以就直接給他center
注意:這個center並不是text-align:center 文字一樣是靠左對齊
slot、slot-scope
選擇對應的插槽(slot),這邊官方文件沒給詳細的列表
因此我們就照著官方文件上的範例來用
不然就要去翻該元件的檔案來看才會知道有哪些能用了
然後我們給他一個 class 要拿來綁定我們自己的CSS用的
再來就是填入文字啦
我們在剛剛的q-carousel-control
加入以下程式碼
<div class="main">
<b class="title">孔子的中心思想是個仁</b>
<p class="subtitle">仁的本性是</p>
<p> 這邊明天來做 Input </p>
</div>
一樣也依照欄位給他對應的class
目前頁面會長這樣
為了讓頁面好看一點,所以要寫一點點的CSS
這裡我用的是stylus
跟原本的CSS長得差不多,只是少了括號跟冒號及分號
應該是不太會影響閱讀
<style lang="stylus" scoped>
.carouselInput
width 90% //不設100%是因為會擋到左右的箭頭按鈕
.carouselInput .main
text-align center //文字置中
color white //文字設成白色
//下面都是調整文字的大小
.carouselInput .title
font-size 48px
.carouselInput .subtitle
font-size 24px
</style>
那現在我們頁面會長這樣
不過電腦看是OK了,到手機一看
會發現字太大了
所以我們針對解析度來調整CSS
這邊把調整文字的CSS替換成
@media (min-width 768px)
.carouselInput .title
font-size 48px
.carouselInput .subtitle
font-size 24px
@media (max-width 768px)
.carouselInput .title
font-size 24px
.carouselInput .subtitle
font-size 16px
這樣在手機看就正常囉~~~
就這樣吧 明天再來介紹輸入的部分~ ☺️☺️
以下為這次的所有程式碼
<template>
<q-page>
<section-carousel/>
</q-page>
</template>
<style>
</style>
<script>
import SectionCarousel from './SectionCarousel'
export default {
components: {
SectionCarousel
}
}
</script>
<template>
<q-carousel
color="white"
infinite
arrows
autoplay
height="400px"
>
<q-carousel-slide img-src="statics/beef.JPG" />
<q-carousel-slide img-src="statics/egg.JPG" />
<q-carousel-control
position="center"
slot="control-nav"
slot-scope="carousel"
class="carouselInput"
>
<div class="main">
<b class="title">孔子的中心思想是個仁</b>
<p class="subtitle">仁的本性是</p>
<p> 這邊明天來做 Input </p>
</div>
</q-carousel-control>
</q-carousel>
</template>
<style lang="stylus" scoped>
.carouselInput
width 90%
.carouselInput .main
text-align center
color white
@media (min-width 768px)
.carouselInput .title
font-size 48px
.carouselInput .subtitle
font-size 24px
@media (max-width 768px)
.carouselInput .title
font-size 24px
.carouselInput .subtitle
font-size 16px
</style>